Mencari Estimasi Turunan Fungsi dengan Ekstrapolasi Richardson¶
Ekstrapolasi Richardson¶
Ekstrapolasi Richardson adalah salah satu teknik menggabungkan dua nilai perkiraan yang dihitung diperoleh dengan menggunakan rumus yang sama atau metode dengan dua ukuran langkah yang berbeda, untuk mendapatkan metode orde tinggi yang menyediakan lebih dekat perkiraan jumlah tertentu.
Bentuk Tabel Extrapolasi Richardson adalah seperti berikut.
Tabel Richardson Extrapolation | |||
---|---|---|---|
$ D(0,0) = \varnothing(h) $ | |||
$ D(0,0) = \varnothing(h/2) $ | $ D(1,1) $ | ||
$ D(0,0) = \varnothing(h/4) $ | $ D(2,1) $ | $ D(2,2) $ | |
$ D(0,0) = \varnothing(h/8) $ | $ D(3,1) $ | $ D(3,1) $ | $ D(3,3) $ |
Nilai kolom pertama atau D(n,0) = $ \varnothing {h\over 2^n} $ = Central Difference. dan pada kolom yang lain menggunakan $ D(n,m) = {4^m \over 4^m - 1}D(n,m-1) - {1 \over 4^m-1}D(n-1,m-1) $
Menghitung menggunakan Extrapolasi Richardson¶
Dari hasil perhitungan tersebut kemudian didapatkan nilai dalam bentuk tabel Richardson
Tabel Richardson | ||
---|---|---|
1,08483 | ||
1,08988 | 1,09156 | |
1,09115 | 1,09157 | 1,09157 |
Pada tabel tersebut baris ke 3 kolom ke 3 adalah hasil estimasi terbaik dari turunan suatu fungsi $ f(x) = x^{cos(x)} $ pada $ x=0.6 $ yaitu 1,09157.
Penerapan Extrapolasi Richardson dengan Python¶
import math from numpy import zeros def Oh(x,h): return (f(x + h) - f(x - h)) / (2*h) def richardson_extrapolation(f, x, h, n): D = zeros((n+1,n+1)) for i in range(n+1): for j in range(i+1): if j==0: D[i,0] = round(Oh(x, h/(2**i)), 5) else: D[i,j] = round(((4**j) / ((4**j) - 1) * D[i,j-1]) - (1 / ((4**j) - 1) * D[i-1, j-1]), 5) print(D[i, 0:i+1]) return D def f(x): return x**math.cos(x) x = 0.6 h = 0.1 n = 2 print('=Tabel Richardson=\n') print('f(x) = x^cos(x)\n') hasil = richardson_extrapolation(f, x, h, n) print('hasil estimasi terbaik adalah', hasil[n,n])
Pada program tersebut menggunakan bantuan dari library numpy untuk menampung nilai hasil perhitungan dalam bentuk array matriks. dan library math yang berisi banyak sekali fungsi matematika.
import math from numpy import zeros
Kemudian terdapat fungsi Oh(x, h) yang merupakan fungsi untuk beda terpusat (Central Difference) yaitu $ f'(x) = {f(x+h) - f(x-h) \over 2h} $
def Oh(x,h): return (f(x + h) - f(x - h)) / (2*h)
Kemudian terdapat fungsi richardson extrapolation(f, x, h, n) dengan f merupakan fungsi yang didefinisikan, x dan h merupakan nilai yang telah didefinisikan, dan n merupakan banyak iterasi/panjang tabel n x n. Di fungsi ini library numpy baru digunakan yaitu zeros((n+1,n+1)) untuk membetuk arrar 0 sepanjang n. kemudian melakukan iterasi untuk menghitung D(0,0) sampai D(n,m). saat iterasi j adalah 0 maka akan menghitung $ D(n,0) = \varnothing (h) = {f(x+h)-f(x-h) \over 2h} $, selain itu akan menghitung $ D(n,m) = {4^m \over 4^m - 1}D(n,m-1) - {1 \over 4^m-1}D(n-1,m-1) $
def richardson_extrapolation(f, x, h, n): D = zeros((n+1,n+1)) for i in range(n+1): for j in range(i+1): if j==0: D[i,0] = round(Oh(x, h/(2**i)), 5) else: D[i,j] = round(((4**j) / ((4**j) - 1) * D[i,j-1]) - (1 / ((4**j) - 1) * D[i-1, j-1]), 5) print(D[i, 0:i+1]) return D
Kemudian membuat fungsi yang akan dihitung turunannya. Dalam program tersebut fungsi yang digunakan adalah $ f(x) = x^{cox(x)} $ dengan x=0.6, h=0.1, dan n=2.
def f(x): return x**math.cos(x) x = 0.6 h = 0.1 n = 2
Saat program tersebut dijalankan maka menghasilkan output seperti berikut.
=Tabel Richardson= f(x) = x^cos(x) [1.08483 ] [1.08988 1.09156] [1.09115 1.09157 1.09157] hasil estimasi terbaik adalah 1.09157
Sekian terimakasih:)